// pages/cart/index.js 

import {getSetting,chooseAddress,showToast,showModal,openSetting} from '../../utils/asyncWx.js'
import regeneratorRuntime from "../../lib/runtime/runtime.js"; 
import {request} from "../../request/index.js"
Page({

  /**
   * 页面的初始数据
   */
  data: {
    address:{},
    cart:[],
    allChecked:false, // 是否全选
    totalPrice:0,     // 总价格
    totalNum:0        // 总数量
  },
 

  // 点击收获地址
  async handleChooseAddress(){
     // 1  获取权限状态
    //   wx.getSetting({
    //     success: (result) => {
    //     //  2 权限状态
    //      const scopeAddress = result.authSetting['scope.address'];
    //      if(scopeAddress === true || scopeAddress == undefined){
    //         wx.chooseAddress({
    //           success: (result1) => {
    //             console.log(result1)
    //           } 
    //         });
    //      }else{
    //        // 3 用户以前拒绝过授予权限 先诱导用户打开授权页面
    //        wx.openSetting({
    //          success:(result2)=>{
    //            console.log(result2)
    //           // 4 可以调用 收获地址代码
    //           wx.chooseAddress({
    //             success: (result3) => {
    //               console.log(result3)
    //             } 
    //           });
    //          }
    //        })
    //      } 
    //    } 
    //  });  

    try{
      // 1  获取权限状态
      const res1 = await getSetting(); 
      const scopeAddress = res1.authSetting['scope.address']; 
      //  2 判断 权限状态
      if(scopeAddress === false){  
        // 3 诱导用户打开授权页面
        await openSetting();  
      }
       // 4 调用获取 收货地址都 api 
      const address = await chooseAddress(); 
      address.all = address.provinceName + address.cityName + address.countyName + address.detailInfo;
      // 存入到缓存中
      wx.setStorageSync('address', address); 
      this.setData({
        address
      })
    }catch(error){
      console.log(error)
    }
 
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
      // 1 获取缓存中的收货地址信息
      const address = wx.getStorageSync('address');  
      // 获取缓存中的购物车数据
      let cart = wx.getStorageSync("cart") || []; 
      this.setData({address});
      this.setCart(cart);
  },

  // 商品的选中
  handleItemChange(e){
    // goods_id
    // 1 获取被修改的商品的id
    const goods_id = e.currentTarget.dataset.id;
    // console.log(goods_id)
    // 2 获取购物车数组
    let {cart} = this.data;
    // 3 找到被修改的商品对象
    let index = cart.findIndex(v=>v.goods_id === goods_id);
    // 4 选中状态取反
    cart[index].checked = !cart[index].checked

    // 5  6把购物车数据重新设置回到data中和缓存中  
    this.setCart(cart);
  },

  // 设置购物车状态同时 重新计算 底部工具栏的数据 全选状态 总价格 购买的数量
  setCart(cart){ 
    let allChecked = true;
      //  总价格   总数量
      let totalPrice = 0;    
      let totalNum = 0; 
      cart.forEach(v=>{
        if(v.checked){
          totalPrice += v.num * v.goods_price;
          totalNum += v.num;
        }else{
          allChecked = false;
        }
      })  

      // 判断数组是否为空
      allChecked = cart.length != 0 ? allChecked : false;
      // 2 给 data 赋值
      this.setData({ 
        cart,
        allChecked,
        totalPrice,
        totalNum
      })

      wx.setStorageSync("cart",cart); 
  },

  // 商品全选功能
  handleItemAllCheck(){
    // 1 获取数据
    let {cart,allChecked} = this.data
    // 2 修改值
    allChecked = !allChecked
    // 3 循环 cart 数组 中的商品选中状态
    cart.forEach(v=>v.checked = allChecked);
    // 4 把修改后的值 填充回 data和缓存中
    this.setCart(cart); 
    wx.setStorageSync("cart",cart); 
  },

  // 商品数量的编辑功能
  async handleItemNumEdit(e){
    //  1 获取传递过来的参数
    const {operation, id} = e.currentTarget.dataset;
    // console.log(operation, id)

    // 2 获取购物车数组
    let {cart} = this.data;
 
     // 3 找到被修改的商品索引
     let index = cart.findIndex(v=>v.goods_id === id);

     // 3.1 判断是否需要执行删除
     if(cart[index].num === 1 && operation === -1){
     // 弹窗提示
      const res = await showModal('您是否需要删除？'); 
      if (res.confirm) {
        // console.log('确定') 
        cart.splice(index,1) 
        // 5 设置回缓存中 和data 中 
        this.setCart(cart)
      }

     }else{
      // 4 修改数量
      cart[index].num += operation; 
       // 5 设置回缓存中 和data 中 
     this.setCart(cart)
     }

    
 
  },

  // 点击结算功能
  async handlePay(){
    // 1 判断收获地址
    const {address,totalNum} = this.data;
    if(!address.userName){
      await showToast('您还没有选择收获地址');
      return;     
    }

    // 2 判断用户有没有选择商品
    if(totalNum === 0){
      await showToast('您还没有选购商品');
      return; 
    }

    //3 跳转 到 支付页面
    wx.navigateTo({
      url: '/pages/pay/index' 
    }); 

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})